定期ミートアップ 第61回
https://github.com/yhara/milika/pulls?q=is%3Apr+is%3Aclosed
ifをAsyncに対応させようとしたが、座礁 https://github.com/yhara/milika/pull/5
Asyncな関数だけCPS変換するようにできないか?
Cライブラリのコールバックとかのため
例:libxmlで特定のノードの処理を書くとか
全部CPS変換すると、返り値の型がRustFutureに変わってしまう
(あとは、.llが読みやすいとデバッグが捗る…かも?)
golangってこのへんどうしてるんでしょうね?
cgo というのがある
普通のgoではだめ?(exact gcだし)
Asyncな関数だけCPS変換するには
無からAsync関数が生えることはない
extern(async) sleep_sec(Int n) -> Null
こういうのを呼ぶ関数
それを呼ぶ関数
それを引数として受けとり、呼ぶ関数
関数を変数に入れて、それを別の関数に渡して〜とした場合も検知できないといけない→データフロー解析?みたいなことが必要
逆はどうか
「確実にAsyncでない」ものだけsyncにする
例:不審な関数を呼ばない
「async fun」と書かせればよいのではないか?
Penの場合
suspensionが起こるかは型でわかるので、C callback safeな関数を書けてるかどうかはユーザがわかる
or 同期的なバージョンをよぶ
詰め替え
https://chimney.readthedocs.io/en/stable/
https://docs.rs/mapper/latest/mapper/
#定期ミートアップ